آموزش ساخت بازی سه بعدی به زبان Basic با دارک بیسیک Dark Basic
تهیه و آموزش نرم افزار دارک بیسیک
 
 
چهار شنبه 21 فروردين 1392برچسب:, :: 5:19 ::  نويسنده : ابوالفضل
برای توضیح راجع به تابع مثالی می زنیم . فرض کنید دوستی داریم که نامش علی است . به او یاد می دهیم تا هر موقع به او عددی را گفتیم ، آن عدد را به توان 2 برساند و جواب را به ما بگوید . در واقع ما یک تابع با نام علی ایجاد کردیم ( علی تابع ما شد ) و یک ورودی شامل یک عدد به او دادیم و یک عدد از او می گیریم . در DarkBasic توابع به همین سادگی ایجاد می شوند . مانند دستورالعمل زیر :
 
(...,Function FunctionName(Value1,Value2
...+Return = Value1+Value2
EndFunction Return
 
طبق این دستورالعمل به جای FunctionName نام تابع و داخل پرانتز به جای Value1 و Value2 و ... هر تعداد ورودی نیاز داشته باشیم به همان تعداد متغیر قرار می دهیم . البته تابع می توانید فاقد ورودی هم باشد ، بین دستور Function و EndFunction دستورات و محاسبات روی ورودی ها صورت می گیرد و روبروی دستور EndFunction خروجی تابع را قرار می دهیم . مانند مثال زیر .
 
(FUNCTION Tvalue(Value
Value = Value ^ 2
ENDFUNCTION Value
 
در این مثال با استفاده از دستور FUNCTION در خط اول شروع یک تابع را آغاز و با نام Tvalue آن تابع را نامگذاری کردیم . متغیر Value را بین دو پرانتز بعد از نام Tvalue به عنوان ورودی تابع مشخص کردیم . ما می توانیم هر نام و یا متغری را به دلخواه به جای Tvalue و Value بنویسیم . سپس با استفاده از دستور ENDFUNCTION اتمام تابع خود را مشخص کردیم و متغیر نوشته شده در آخر ( Value ) که روبروی دستور ENDFUNCTION تایپ شده ، مقدار برگشتی تابع را مشخص می کند . به مثال زیر دقت کنید :
 
REM Start of program
("Print BetterPrint(10,10,"Hello world
Wait Key
END
($FUNCTION BetterPrint(x,y,t
Z = x * y
$PRINT t
ENDFUNCTION Z
 
با اجرای این مثال در خط پنجم تابعی با نام BetterPrint با سه وردی ( دو ورودی x و y از نوع عدد و $t از نوع کاراکتر ) ایجاد و داخل تابع ورودی x و y در هم ضرب شدند ، و در Z ذخیره شد و در خط هفتم مقدار ورودی $t چاپ شد و در خط هشتم توسط دستور EndFunction تابع به اتمام رسید و متغیر موجود روبروی دستور ENDFUNCTION ( یعنی Z ) مقدار برگشتی تابع را مشخص می کند که در خط دوم توسط دستور Print چاپ شد .
 
لزومی ندارد که توابع حتما مقدار ورودی و خروجی داشته باشند . مانند مثال زیر :
 
()Example
Wait Key
End
()FUNCTION Example
"PRINT "Hello
ENDFUNCTION
 
با اجرای این مثال عبارت Hello چاپ خواهد شد .
 
دستور EXITFUNCTION
از این دستور برای خروج ناگهانی از تابع می توان استفاده کرد . یعنی شرایطی به وجود می آید که ما مجبور می شویم تا قبل از رسیدن به دستور ENDFUNCTION از تابع خارج شویم . مانند مثال زیر :
 
(Function myAdad(x
If x<2 Then ExitFunction
For I = 1 To x
Print I
Next I
EndFunction
 
توابع داخلی DarkBasic
تا الان چگونگی ایجاد و بکارگیری توابع را یاد گرفتیم . DarkBasic خود نیز توابع گوناگونی دارد که بسیار کاربردی و سودمندند . این توابع همگی مخفی و غیر قابل ویرایش هستند . برای استفاده از آنها کافی است با نام و کاربرد هر یک آشنا شویم که عبارتند از :
 
تابع COS
این تابع کسینوس زاویه ای را برمی گرداند . مانند دستورالعمل زیر :
 
(Return = COS(Value
 
طبق این دستورالعمل کسینوس زاویه ی Value در متغیر Return از نوع Float ذخیره می شود . مانند مثال زیر :
 
myValue As Float
(myValue = Cos(45
Print myValue
Wait key
 
با اجرای این مثال کسینوس زاویه ی 45 درجه در متغیر myValue ذخیره می شود . دقت داشته باشید که متغیر myValue حتما از نوع اعشاری ( Float یا Real ) باشد . زیرا برای مثال کسینوس زاویه ی 45 درجه که برابر 0.707107 است در یک متغیر از نوع Integer نشان داده نمی شود و برابر صفر ذخیره خواهد شد .
 
تابع SIN
این تابع سینوس زاویه ای را برمی گرداند . مانند دستورالعمل زیر :
 
(Return = Sin(Value
 
طبق این دستورالعمل سینوس زاویه ی Value در متغیر Return از نوع Float ذخیره می شود . مانند مثال زیر :
 
myNumber As Float
(myNumber = Sin(40
Print myNumber
 
Wait key
 
با اجرای این مثال سینوس زاویه ی 40 درجه در متغیر myNumber ذخیره می شود . دقت داشته باشید که متغیر myNumber حتما از نوع اعشاری ( Float یا Real ) باشد . زیرا برای مثال سینوس زاویه ی 40 درجه که برابر 0.642788 است در متغیر از نوع Integer نشان داده نمی شود و برابر صفر ذخیره خواهد شد .
 
تابع TAN
این تابع تانژانت عددی را برمی گرداند . مانند دستورالعمل زیر :
 
(Return = Tan(Value
 
طبق این دستورالعمل تانژانت زاویه ی Value در متغیر Return از نوع Float ذخیره می شود . مانند مثال زیر :
 
myNumber As Float
(myNumber = Tan(40
Print myNumber
Wait key
 
تابع ACOS
این تابع آرک کسینوس عددی را برمی گرداند . مانند دستورالعمل زیر :
 
(Return = ACos(Value
 
طبق این دستورالعمل آرک کسینوس Value در متغیر Return از نوع Float ذخیره می شود .
 
تابع ASIN
این تابع آرک سینوس عددی را برمی گرداند . مانند دستورالعمل زیر :
 
(Return = ASin(Value
 
طبق این دستورالعمل آرک سینوس Value در متغیر Return از نوع Float ذخیره می شود .
 
تابع ATAN
این تابع آرک تانژانت زاویه ای ( محدوده ی 0 تا 360 درجه ) را برمی گرداند .
 
تابع HCOS
این تابع هایپر بولیک کوسینوس عددی را برمی گرداند .
 
تابع HSIN
این تابع هایپر بولیک سینوس عددی را برمی گرداند .
 
تابع HTAN
این تابع هایپربولیک عددی را برمی گرداند .
 
تابع SQRT
این تابع رادیکال عددی را برمی گرداند . مثلا رادیکال 64 برابر 8 است .
 
تابع ABS
این تابع قدرمطلق عددی را برمی گرداند . مثلا قدر مطلق 500- برابر 500 است .
 
تابع INT
این تابع مقدار صحیح ( Integer ) عددی را بر می گرداند . یعنی مقدار بعد از اعشار آن عدد را حذف می کند . مثلا مقدار صحیح عدد 1.23 برابر 1 است .
 
تابع RND
این تابع عددی تصادفی بین صفر و مقداری که در این تابع وارد شده را که از نوع Integer است ، برمی گرداند . مانند مثال زیر :
 
()RANDOMIZE TIMER
A As Integer
DO
(A=Rnd(640
Sleep 100
PRINT A
LOOP
 
با اجرای این مثال اعدادی بین 0 و 640 بصورت تصادفی چاپ خواهند شد . ما می توانیم به جای 640 عدد دلخواهمان را قرار دهیم تا اعداد مابین صفر تا آن عدد چاپ شود .
دستور ()RANDOMIZE TIMER نوشته شده در اولین خط باعث می شود تا اعداد بدست آمده با تایمر بایوس مطابقت کنه و تابع ()Rnd کاملا تصادفی باشد .
 
تابع ATANFULL
این تابع زاویه ی بین دو نقطه را در صفحه بر می گرداند . برای مثال اگر دو نقطه ی ( x1 و y1 ) و ( x2 و y2 ) داشته باشیم . زاویه ی بین این دو نقطه از طریق زیر بدست می آید :
 
x1# = 0
y1# = 0
x2# = 640
y2# = 480
(dx# = ABS(x1#-x2#
(dy# = ABS(y1#-y2#
(#angle# = ATANFULL(dx#,dy
#PRINT angle
WAIT KEY
 
تابع TIMER
این تابع با استفاده از تایمر سیستم ( Main Board ) عددی از نوع Integer برمی گرداند ، که دائما و بطور دقیق هر یک هزارم ثانیه یک واحد به آن اضافه می شود . یعنی هر ثانیه 1000 واحد به آن عدد اضافه می شود . مانند مثال زیر :
 
Do
()Print Timer
Loop
 
تابع INKEY
این تابع یک عبارت تک کاراکتری ( از نوع String ) را برمی گرداند که معادل فشرده شدن کلیدی از کیبورد است . یعنی اگر کلید [G] از کیبورد ( Key Board ) را فشار دهیم . تابع ()$Inkey مقدار g را بر می گرداند . مانند مثال زیر :
 
DO
CLS
()$PRINT INKEY
LOOP
 
این مثال را اجرا کنید . سپس چند کلید را بطور دلخواه فشار دهید . خواهید دید که هر کلیدی را فشار می دهید ، حرف چاپ شده بر روی همان دکمه از کیبورد بر روی مانیتور نمایش داده می شود .
 
تابع GET TIME
این تابع مقدار ساعت جاری سیستم را بصورت یک عبارت 8 کاراکتری از نوع String برمی گرداند . یعنی ساعتی که در نوار TaskBar ویندوز مشاهده می کنید ، توسط تابعی در ویندوز از روی چیپستی که در Main Board نصب شده خوانده می شود . در DarkBasic هم می توان توسط دستور ()$Get Time ساعت سیستم را خواند . مانند مثال زیر :
 
Do
()$Print Get Time
Loop
 
با اجرای این مثال ، خواهید دید که یک عبارت رشته ای 8 کاراکتری ، ساعت سیستم را نمایش می دهد ،
که کاراکتر اول و دوم ساعت ، کاراکتر سوم ثابت با علامت ( : ) ، کاراکتر چهارم و پنجم دقیقه ، کاراکتر ششم ثابت با علامت ( : ) و کاراکتر هفتم و هشتم ثانیه را نشان می دهند .
 
تابع GET DATE
عملکرد این تابع مانند تابع قبلی ( ()$Get Time ) می باشد . با این تفاوت که این تابع تاریخ جاری سیستم را بصورت عبارت کاراکتری ( از نوع String ) بر می گرداند . مانند مثال زیر :
 
()$strDate$ = Get Date
$Print strDate
Wait Key
 
تابع FLOOR
این تابع اعداد ممیزدار را رند می کند و بصورت عددی از نوع Flooat برمی گرداند . البته به سمت کمتر . یعنی حاصل 1.5 را 1 و حاصل 1.5- را 2- برمی گرداند . مانند مثال زیر :
 
(Print "Floar (1.5) = " ; Floor(1.5
(Print "Floar (1) = " ; Floor(1
(Print "Floar (0) = " ; Floor(0
(Print "Floar (-1.5) = " ; Floor(-1.5
(Print "Floar (-1) = " ; Floor(-1
Wait Key
 
تابع CEIL
این تابع مانند تابع قبل اعداد ممیز دار را رند می کند و بصورت عددی از نوع Flooat بر می گرداند . البته به سمت بیشتر . یعنی حاصل 1.5 را 2 و حاصل 1.5- را 1- برمی گرداند . مانند مثال زیر :
 
(Print "Ceil 1.5 = " ; Ceil(1.5
(Print "Ceil 1 = " ; Ceil(1
 
(Print "Ceil 0 = " ; Ceil(0
(Print "Ceil -1.5 = " ; Ceil(-1.5
(Print "Ceil -1 = " ; Ceil(-1
Wait Key
 
تابع EXP
این تابع  eرا به توان عدد ورودی در تابع می رساند . مانند مثال زیر :
 
(Print Exp(10
Wait Key
 
 
تابع WRAPVALUE
این تابع عدد ورودی اش را بر حسب 0 تا 359 درجه حساب می کند . یعنی فرض می کند که اعداد بر روی دایره ای با 360 درجه در حال زیاد شدن و یا کم شدن هستند . مثلا اگر عدد از 0 گذشت و شد 361 آن را 1 در نظر می گیرد . و یا اگر عدد برابر 400 شد ، آن را 40 ( 40=360-400 ) در نظر می گیرد
و اگر عدد برابر 50- بود ، آن را 310 (310=[50-]-360) در نظر می گیرد . مانند مثال زیر :
 
A = 0
Do
A = A + 1
Set Cursor 10,10
Print "A : ";A
Set Cursor 10,30
(Print "WrapValue(A) : ";WrapValue(A
Wait 20
Cls
Loop
 
نکته : همیشه بعد از نام توابع ، پرانتز باز و پرانتز بسته ی آنها را هم قرار دهید . هرچند تابع ورودی نداشته باشد .


صفحه قبل 1 صفحه بعد

درباره وبلاگ


به وبلاگ من خوش آمدید
آخرین مطالب
پيوندها

تبادل لینک هوشمند
برای تبادل لینک  ابتدا ما را با عنوان آموزش ساخت بازی 3D ( سه بعدی ) به زبان Basic با دارک بیسیک D و آدرس darkbasic.LXB.ir لینک نمایید سپس مشخصات لینک خود را در زیر نوشته . در صورت وجود لینک ما در سایت شما لینکتان به طور خودکار در سایت ما قرار میگیرد.





نويسندگان


آمار وب سایت:  

بازدید امروز : 8
بازدید دیروز : 0
بازدید هفته : 23
بازدید ماه : 250
بازدید کل : 99620
تعداد مطالب : 24
تعداد نظرات : 3
تعداد آنلاین : 1